namespace go DeviceCenter

include "device.thrift"

/*设备接入信息*/
struct DeviceSetupInfo {
    1: string deviceSipID,                     /*设备国标ID*/
    2: string deviceRawID,                     /*设备厂家ID*/
    3: device.VideoStreamMode videoStreamMode, /*视频推流的方式*/
    4: string rtspUrl,                         /*视频推流的RTSP Url*/
    5: string deviceIP,                        /*IP地址*/
    6: i32 devicePort,                         /*连接端口*/
    7: string userName,                        /*用户名*/
    8: string userPassword,                    /*密码*/
    9: i32 channelCount,                       /*通道数量*/
    10: device.BrandType brandType,            /*设备品牌*/
    11: string protocVersion,                  /*设备对应的sdk版本号*/
    12: i32 streamType,                        /*0-主码流，1-子码流，2-3码流，3-虚拟码流4，以此类推*/
    13: i32 linkMode,                          /*0- TCP方式，1- UDP方式，2- 多播方式，3- RTP方式，4-RTP/RTSP，5-RSTP/HTTP*/
    14: i32 protoType,                         /*取流协议 0- 私有协议(默认)，1- RTSP协议*/
    15: string connectSolutionID,              /*接入方案ID*/
    16: device.IPCType ipcType,                /*设备IPC类型: 0_nvr 1_ipc 2_无人机*/
    17: bool isDirectConnect,                  /*是否直连*/
    18: i32 channelID,                         /*通道号*/
    19: i32 parentChannelID,                   /*父级通道号*/
    20: string parentSipID,                    /*父级SipID*/
    21: string deviceName,                     /*设备名称*/
}


struct ReportResponse {
    1: i32 code,
    2: string msg,
}

/*媒体中心的ip信息*/
struct MediaCenterInfo {
    1: string ip, /*IP地址*/
}

struct heartBeatInfo {
    1: string DccID, //连接中心ID
    2: i64 Ping,
    3: i64 Pong,
}

/* 设备信息 */
struct IsDeviceLogin {
    1: string deviceSipID,                  /*设备ID*/
    2: bool IsOk,                           /*是否OK*/
    3: string status,                       /*设备状态: OK、ERROR*/
    4: string faultDesc,                    /*故障描述*/
    5: DeviceSetupInfo deviceInfo,
    6: bool IsSubscribe,                    /* 是否有订阅 */
    7: list<device.SubscribeParam> subscribeParam, /* 订阅参数 */
}

/* 设备订阅信息 */
struct DeviceSubscribe {
    1: string deviceSipID,                              /*设备ID*/
    2: bool IsOK,                                      /*是否OK*/
    3: string status,                                /*设备状态: OK、ERROR*/
    4: string faultDesc,                            /*故障描述*/
    5: list<device.SubscribeParam> subscribeParam, /* 订阅参数 */
}

struct DeviceStatus {
    1: string deviceSipID,  /*设备ID*/
    2: i32 channelID,       /*通道ID*/
    3: i32 parentChannelID, /*父级通道号*/
    4: string parentSipID,  /*父级SipID*/
    5: bool OnLine,         /*在线状态：0_离线 1_在线*/
    6: string status,       /*设备状态: OK、ERROR*/
    7: string faultDesc,    /*故障描述*/
}

//接入中心配置
struct DccConfig {
    1: string DccID, /* 接入中心id */
    2: string DccIP, /* 接入中心ip */
    3: string DccPort, /* 接入中心端口 */
    4: string City, /* 城市 */
    5: i32 protoType,
}

struct RespDccConfig {
    1: i32 code,
    2: string msg,
    3: bool isOk,     /*是否OK*/
    4: DccConfig cfg,
}

service DeviceCenter {

    /*链接中心心跳*/
    heartBeatInfo DccHeartBeat(1: heartBeatInfo param),
    //上报设备状态消息给设备管理中心
    ReportResponse DeviceStatusReport(1: string connCenterID, 2: list<DeviceStatus> param),
    //上报设备历史视频文件给设备管理中心
    ReportResponse DeviceHistoryListReport(1: string connCenterID, 2: string deviceID, 3: list<device.DeviceHistoryList> param),
    // //设备推流结束上报(文件下载)
    // ReportResponse RecordFileDownloadCompleteReport(1:string connCenterID, 2:string deviceID, 3:string SSRCStr),
    //立即上报给设备管理中心
    ReportResponse ImmediaReportToServer(1: string connCenterID, 2: string deviceSipID, 3: string msg),

    /*接入中心将刚连接的设备信息立即上报给设备管理中心：如 通过Ehome协议接入的设备*/
    ReportResponse DeviceLoginReport(1: string connCenterID, 2: DeviceSetupInfo param),

    /*加载该接入中心负责的所有设备信息*/
    list<DeviceSetupInfo> LoadDeviceConnectInfo(1: string connCenterID),

    /*查询设备是否存在*/
    IsDeviceLogin DccQueryDevice(1: string connCenterID, 2: string deviceID),

    /*查询设备订阅*/
    DeviceSubscribe DccQuerySubscribe(1: string connCenterID, 2: string deviceID),
    /*加载该接入中心负责的所有媒体中心的ip信息*/
    list<MediaCenterInfo> loadMediaCenterInfo(1: string connCenterID),
    //接入中心配置加载
    RespDccConfig LoadDccConfig(1: DccConfig cfg),
}